﻿using MDT.LifeSewagePlatform.Conmmon;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*********************************************************
 * 命名空间 MDT.LifeSewagePlatform.Extension.console
 * 接口名称 ConsoleExtension
 * 开发人员：-nhy
 * 创建时间：2022/4/7 17:28:35
 * 描述说明：
 * 更改历史：
 * 
 * *******************************************************/
namespace MDT.LifeSewagePlatform.Extension.console
{
    internal static class ConsoleExtension
    {
        public static void ConsoleShow<T, TLooger>(this T t, ILogger<TLooger> logger) where T : IConsoleShow
        {
            if (t == null)
            {
                return;
            }
            Type type = typeof(T);
            foreach (var item in type.GetProperties())
            {
                var f = item.PropertyType;
                if (item.PropertyType.IsValueType || item.PropertyType == typeof(string))
                {

                    logger.LogInformation($"******{item.Name}:{item.GetValue(t)}");

                }
                else if (item.ToString().Contains(typeof(List<>).ToString().Split('`')[0]))
                {
                    dynamic datas = item.GetValue(t);
                    if (datas == null)
                    {
                        return;
                    }
                    foreach (var obj in datas)
                    {
                        ConsoleShow(obj, logger);
                    }
                }
                else
                {
                    ConsoleShow(item.GetValue(t), logger);
                }
            }
        }


        private static void ConsoleShow<TLooger>(object o, ILogger<TLooger> logger)
        {
            if (o == null)
            {
                return;
            }
            foreach (var item in o.GetType().GetProperties())
            {
                var f = item.PropertyType;
                if (item.PropertyType.IsValueType || item.PropertyType == typeof(string) || item.PropertyType == typeof(int) || item.PropertyType == typeof(double) || item.PropertyType == typeof(float))
                {
                    Console.WriteLine($"******{item.Name}:{item.GetValue(o)}");
                }
                else if (item.ToString().Contains("List"))
                {
                    ConsoleShow((object[])item.GetValue(o), logger);
                }
                else
                {
                    ConsoleShow(item.GetValue(o), logger);
                }
            }
        }

        private static void ConsoleShow<TLooger>(object[] os, ILogger<TLooger> logger)
        {
            if (os == null)
            {
                return;
            }
            foreach (var o in os)
            {
                ConsoleShow(o, logger);
            }
        }
    }
}
